/*
实现删除字符串中出现次数最少的字符，若出现次数最少的字符有多个，则把出现次数最少的字符都删除。输出删除这些单词后的字符串，字符串中其它字符保持原来的顺序。
数据范围：输入的字符串长度满足 1 <= n <= 20  ，保证输入的字符串中仅出现小写字母

输入描述：
字符串只包含小写英文字母, 不考虑非法输入，输入的字符串长度小于等于20个字节。

输出描述：
删除字符串中出现次数最少的字符后的字符串。
*/


#include <stdio.h>
#include <string.h>
//1.由于只出现小写字母，可先将其转化为数字存放
//2.题目并未说明输入的同一字母是连续出现的，因此考虑散列记录每个字母出现的次数
//3.出现次数最少的字母可能不止一个
//
int main(){
    char str[30];//字符串接收键盘输入
    int hash[30] = {0};//散列表初始化  (代表字母a-z出现的次数)
    fgets(str,30,stdin);//gets不安全，使用fgets接收字符串
    int ch[30];//用来存放转化后的字母对应的数字
    for(int i=0;i<strlen(str)-1;i++){//由于使用fgets接收字符串会存放最后的回车键和结束符，
        ch[i] = str[i] - 'a';//转化        //故i<strlen(str)-1
        hash[ch[i]]+=1;//字母出现的次数
    }
    int min = hash[ch[0]];//出现次数最少的字母次数
    for(int i=1;i<strlen(str)-1;i++){
        if(hash[ch[i]]<=min){//注意最小次数的字母不止一个
           min = hash[ch[i]];
        }
    }
    for(int i=0;i<strlen(str)-1;i++){
        if(hash[ch[i]]>min)
            printf("%c",ch[i] + 'a');//再将存放的数字还原输出成字符
    }
    return 0;
}

